iT邦幫忙

2026 iThome 鐵人賽

DAY 17
1
Software Development

快樂演算法系列 第 17

八字水平圓 & 347 v2 ->102

  • 分享至 

  • xImage
  •  
  1. bucket[1] = [3] // 數字 3 出現 1 次
    bucket[2] = [2] // 數字 2 出現 2 次
    bucket[3] = [1] // 數字 1 出現 3 次

3 → 1 bucket[3] 裡面是數字 1
2 → 2 bucket[2] 裡面是數字 2

bucket 的 index 就是出現次數:

bucket[1] 低頻
bucket[2]
bucket[3] 高頻

k = 要幾個答案;bucket index = 出現幾次;bucket 裡面 = 哪些數字出現這麼多次。

找 max 頻率,再填回本身數字;可能有多個數字同頻率,所以 bucket[freq] 才是 vector,不是單一 int。

3.102

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* node) {//最上node一層一層讀Tree
        vector<vector<int>> answer;//每一層是一個vector

        if (!node)//如果整Tree是空
            return answer;//直接[]

        queue<TreeNode*> nodesToVisit;//Queue存接下來要處理node
        nodesToVisit.push(node);//先最上面node進Queue

        while (!nodesToVisit.empty()) {//Queue有node繼續
            int levelSize = nodesToVisit.size();//這層有幾個node
            vector<int> level;//準備存目前這層數值
            level.reserve(levelSize);//準備這層要的空間

            for (int i = 0; i < levelSize; ++i) {//只處理目前這層
                TreeNode* currentNode = nodesToVisit.front();//取Queue最前node
                nodesToVisit.pop();//這node已開始處理,移出Queue

                level.push_back(currentNode->val);//目前node的value放這層

                if (currentNode->left)//如果有左邊node
                    nodesToVisit.push(currentNode->left);//放Queue給下層處理

                if (currentNode->right)//如果有右邊node
                    nodesToVisit.push(currentNode->right);//同上
            }

            answer.push_back(level);//完成一整層,放進答案
        }

        return answer;//所有層
    }
};

上一篇
yolo26m 一步錯步步錯還要修 & 236 v3怎麼好像背起來了!->347
下一篇
The second drone has been successfully built & 102 v2
系列文
快樂演算法18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
AndyAWD
iT邦新手 1 級 ‧ 2026-09-05 23:31:26

原來 bucket,不是單一 int

我要留言

立即登入留言